﻿using System;
using System.Diagnostics;
using csvm.csvanalyse;
using csvm.csvrepo;
using csvm.konsole;
using csvm.metadatenrepo;
using csvm.parametervalidation;
using ebc.patterns;

namespace csvm.host.batch
{
    class Program
    {
        static int Main(string[] args)
        {
            bool processingFailed = false;
            var exceptionHandler = new ExceptionHandler<string[]>(ex =>
                {
                    Trace.TraceError("Fehler bei der Verarbeitung: {0}\n{1}", ex.Message, ex.StackTrace);
                    Console.WriteLine("*** Fehler bei der Verarbeitung: {0}\n{1}", ex.Message, ex.StackTrace);
                    processingFailed = true;
                });

            var konsole = new Konsole();
            var analyse = new AnalysePlatine(
                new ParameterValidator(),
                new MetadatenkopfSchreiben(),
                new DatensätzeLesen(),
                new DatensätzeAnalysieren(),
                new MetadatensätzeSchreiben(),
                new MetadatenkopfFinalisieren());

            var hauptplatine = new Hauptplatine(exceptionHandler, konsole, analyse);
            hauptplatine.Run(args);

            return processingFailed ? 1 : 0;
        }
    }
}
